The present invention relates to the field of computer graphics, and in particular to methods and apparatus for creating, modifying, and using components to create computer graphics productions. Many computer graphic images are created by mathematically modeling the interaction of light with a three dimensional scene from a given viewpoint. This process, called rendering, generates a two-dimensional image of the scene from the given viewpoint, and is analogous to taking a photograph of a real-world scene. Animated sequences can be created by rendering a sequence of images of a scene as the scene is gradually changed over time. A great deal of effort has been devoted to making realistic looking and artistically compelling rendered images and animations.
Computer graphics images, animations, and other productions involving computer graphics, such as interactive entertainment software, are created from a number of different components. Generally, components include any data and instructions used to create products and applications that include computer graphics. Examples of components include three-dimensional models of geometry; texture maps, other arrays of data, lighting, and shading programs used to determine the visual appearance of models; and simulation programs and data, animation data, and deformer functions used to specify changes and motion over time.
Components often have complex dependencies with other components. For example, the output of one component may be the input of one or more other components. Additionally, a set of components may have to be processed or executed in a specific order to achieve a desired result. Changing the order of processing or execution of components may change the result or introduce errors.
Ordered lists are one technique for specifying relationships and/or dependencies between components. An ordered list specifies a set of related components and their ordering or sequence. Ordered lists may be used to specify an evaluation order for components, an execution order for components, a dataflow relationship between components, or any other use of a specific sequence of components.
Computer graphics components are often created by users working in a digital production pipeline. Digital production pipelines include a number of different pipeline activities. In each pipeline activity, users may create new components, modify previously created components, and combine components created in one or more pipeline activity.
For large digital productions, such as in an animation or interactive digital production studio, it is often necessary for multiple people to be working on different activities of the digital production pipeline at the same time. Often, different people will be working on the same or related components at the same time. Some components may be created out of order to maximize user productivity. Additionally, the components of a completed scene may sent back into the digital production pipeline to create variations of components, which may be used to create and evaluate different creative interpretations of a scene. A pipeline activity may modify a component many times to create numerous variations of the component.
Prior digital production pipelines limit user collaboration and out of order creation and modification of components. For example, version control techniques maintain a strictly linear pipeline workflow. As components progress through activities in the digital production pipeline, changes to components replace or overwrite the previous state of the components. Because of this, it is possible to make potentially destructive modifications to any data that was authored at previous stages in the pipeline. It is difficult or impossible to go back to one previous stage of the digital production pipeline and create variations without discarding all of the data created following that previous stage. It is also typically difficult or impossible to return to an earlier point in the workflow to make changes and still have unaffected “downstream” changes apply.
These problems are especially acute when dealing with the creation and modification of ordered lists. In prior systems, an ordered list of components may be initially defined in a first pipeline activity. If this ordered list needs to be modified in later pipeline activity, for example by adding components, a new ordered list has to specified, overwriting the previously-defined ordered list. If the first pipeline activity later modifies its components, yet another new ordered list must be specified. This process is complicated and error-prone, as this newest ordered list must include components that are defined by later pipeline stages.
There is an unmet need for a system and method to enable collaboration, iterative refinement, and variations of ordered lists of components in digital production pipelines. It is further desirable for the system and method to enable modification of ordered lists of components at any point of the production pipeline and in any order without disrupting work upstream or downstream in the pipeline.